from django.shortcuts import render
from django.views import View
from apps.areas.models import Area
from django import http
from django.core.cache import cache

# Create your views here.


class SubAreasView(View):
    """子级地区：市和区县
    GET: /areas/(?P<pk>[1-9]\d+)/"""

    def get(self, request, pk):
        """
        提供 市或区县地区数据
        1 查询市或区县地区数据
        2 序列化数据
        3 响应数据
        4 补充缓存数据
        :param request:
        :param pk:
        :return:
        """

        # 判断是否有缓存
        sub_data = cache.get('sub_area_' + pk)

        if not sub_data:
            try:
                # 查询市或区县地区数据
                sub_model_list = Area.objects.filter(parent=pk)

                # 查询省份数据
                parent_model = Area.objects.get(id=pk)

                # 整理市或区县数据
                sub_list = []
                for sub_model in sub_model_list:
                    sub_list.append({'id': sub_model.id,
                                     'name': sub_model.name})

                sub_data = {
                    'id': parent_model.id,
                    'name': parent_model.name,
                    'subs': sub_list
                }

                # 缓存市或区县数据
                cache.set('sub_area_' + pk, sub_data, 3600)

            except Exception as e:
                return http.JsonResponse({'code': 400, 'errmsg': '市或区县数据有误'})

        # 响应市或区县数据
        return http.JsonResponse({'code': 0,
                                  'errmsg': 'ok',
                                  'sub_data': sub_data})




class ProvinceAreasView(View):
    """省级地区
    GET: /areas/
    """

    def get(self,request):
        """
        提供省级地区数据
        1 查询省级数据
        2 序列化省级数据
        3 响应省级数据
        4 补充缓存逻辑
        """

        # 增加：判断是否有缓存
        province_list = cache.get('province_list')

        if not province_list:
            try:
                # 查询省级数据
                province_model_list = Area.objects.filter(parent__isnull=True)

                # 整理省级数据
                province_list = []
                for province_model in province_model_list:
                    province_list.append({'id': province_model.id,
                                          'name': province_model.name})

                # 增加：缓存省级数据
                cache.set('province_list', province_list, 3600)

            except Exception as e:
                # 如果错误，则返回错误原因
                return http.JsonResponse({'code': 400, 'errmsg': '省份数据错误'})

        # 返回整理好的省级数据
        return http.JsonResponse({'code': 0,
                                  'errmsg': 'ok',
                                  'province_list': province_list})


